home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / asm / pgtable-2level.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  69 lines

  1. #ifndef _I386_PGTABLE_2LEVEL_H
  2. #define _I386_PGTABLE_2LEVEL_H
  3.  
  4. #include <asm-generic/pgtable-nopmd.h>
  5.  
  6. #define pte_ERROR(e) \
  7.     printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low)
  8. #define pgd_ERROR(e) \
  9.     printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
  10.  
  11. /*
  12.  * Certain architectures need to do special things when PTEs
  13.  * within a page table are directly modified.  Thus, the following
  14.  * hook is made available.
  15.  */
  16. #define set_pte(pteptr, pteval) (*(pteptr) = pteval)
  17. #define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
  18. #define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
  19.  
  20. #define ptep_get_and_clear(xp)    __pte(xchg(&(xp)->pte_low, 0))
  21. #define pte_same(a, b)        ((a).pte_low == (b).pte_low)
  22. #define pte_page(x)        pfn_to_page(pte_pfn(x))
  23. #define pte_none(x)        (!(x).pte_low)
  24. #define pte_pfn(x)        ((unsigned long)(((x).pte_low >> PAGE_SHIFT)))
  25. #define pfn_pte(pfn, prot)    __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
  26. #define pfn_pmd(pfn, prot)    __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
  27.  
  28. #define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT))
  29.  
  30. #define pmd_page_kernel(pmd) \
  31. ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
  32.  
  33. /*
  34.  * All present user pages are user-executable:
  35.  */
  36. static inline int pte_exec(pte_t pte)
  37. {
  38.     return pte_user(pte);
  39. }
  40.  
  41. /*
  42.  * All present pages are kernel-executable:
  43.  */
  44. static inline int pte_exec_kernel(pte_t pte)
  45. {
  46.     return 1;
  47. }
  48.  
  49. /*
  50.  * Bits 0, 6 and 7 are taken, split up the 29 bits of offset
  51.  * into this range:
  52.  */
  53. #define PTE_FILE_MAX_BITS    29
  54.  
  55. #define pte_to_pgoff(pte) \
  56.     ((((pte).pte_low >> 1) & 0x1f ) + (((pte).pte_low >> 8) << 5 ))
  57.  
  58. #define pgoff_to_pte(off) \
  59.     ((pte_t) { (((off) & 0x1f) << 1) + (((off) >> 5) << 8) + _PAGE_FILE })
  60.  
  61. /* Encode and de-code a swap entry */
  62. #define __swp_type(x)            (((x).val >> 1) & 0x1f)
  63. #define __swp_offset(x)            ((x).val >> 8)
  64. #define __swp_entry(type, offset)    ((swp_entry_t) { ((type) << 1) | ((offset) << 8) })
  65. #define __pte_to_swp_entry(pte)        ((swp_entry_t) { (pte).pte_low })
  66. #define __swp_entry_to_pte(x)        ((pte_t) { (x).val })
  67.  
  68. #endif /* _I386_PGTABLE_2LEVEL_H */
  69.